package kusterordonio.interfaz;

import java.awt.event.KeyEvent;
import java.util.*;
import java.text.*;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

import kusterordonio.dominio.*;

public class VentanaAptitudFisica extends javax.swing.JFrame {
    
    private SistemaCarne modelo;
    private Ninio niño;
    private FuncionesAuxiliares funcAux;
    private DefaultTableModel tabla;
    private Persona actor;
    private boolean caso;
    
    /** Creates new form VentanaAptitudFisica */
    public VentanaAptitudFisica() {
        initComponents();
    }
    
    public VentanaAptitudFisica(SistemaCarne unSistema, Ninio unNiño, FuncionesAuxiliares unaFunc, Persona unActor, boolean unCaso) {
        modelo = unSistema;
        niño = unNiño;
        funcAux = unaFunc;
        tabla = new DefaultTableModel();
        actor = unActor;
        caso = unCaso;
        initComponents();
        controlGenero();
        cargarDatos();
        controlCaso();
        cargarEncabezados();
        cargarTabla();
        jBtnSalir.setMnemonic(KeyEvent.VK_S);
        jBtnConfirmar.setMnemonic(KeyEvent.VK_C);
        jDateFecha.setMaxSelectableDate(Calendar.getInstance().getTime());
        jDateFecha.setMinSelectableDate(niño.getFechaNac());
        jDateHasta.setMinSelectableDate(niño.getFechaNac());
    }
    
    //setea los elementos de la ventana según el rol del actor
    public void controlCaso(){
        jDateFecha.setEnabled(caso);
        jDateFecha.setVisible(caso);
        jDateHasta.setEnabled(caso);
        jDateHasta.setVisible(caso);
        jTxtObservaciones.setEditable(caso);
        jTxtObservaciones.setVisible(caso);
        jCheckApto.setEnabled(caso);
        jCheckApto.setVisible(caso);
        jBtnConfirmar.setVisible(caso);
        jTextField1.setVisible(caso);
        jTextField4.setVisible(caso);
        jTextField5.setVisible(caso);
        jTextField6.setVisible(caso);
        jLabel3.setVisible(caso);
        if(!caso)
            jScrollPane1.setBounds(30, 70, 690, 302);
    }
 
    //Setea los labels de la ventana según el sexo del niño
    public void controlGenero(){
        if(!niño.isSexo()){
            this.jLabelTitular.setForeground(new java.awt.Color(255, 153, 0));
            this.jLabel1.setForeground(new java.awt.Color(255, 153, 0));
            this.jTextField6.setBackground(new java.awt.Color(255, 153, 0));
            this.jTextField1.setBackground(new java.awt.Color(255, 153, 0));
            this.jTextField4.setBackground(new java.awt.Color(255, 153, 0));
            this.jTextField5.setBackground(new java.awt.Color(255, 153, 0));
        }
    }
    
    //Carga los encabezados de la tabla
    public void cargarEncabezados(){
        tabla.addColumn("Fecha");
        tabla.addColumn("Edad");
        tabla.addColumn("Apto");
        tabla.addColumn("Observaciones");
        tabla.addColumn("Valido Hasta");
        tabla.addColumn("Medico");
    }

    public void cargarDatos(){
        jLabelNombre.setText(niño.toString());
    }
    
    public void cargarTabla(){
        ArrayList<AptitudFisica> lista= niño.getCarne().getAptitudFisica();
        if(!niño.getCarne().esVaciaAptitudFisica()){
            //Despejamos la tabla para volver a cargarla
            int row = tabla.getRowCount();
            if(tabla.getRowCount() != 0){
                 while(row> 0){
                     tabla.removeRow(0);
                     row--;
                 }
            }
            //Cargamos la tabla
            SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
            for(int i=0; i<lista.size(); i++){
                Object[] linea = new Object[6]; 
                linea[0] = formato.format(lista.get(i).getFecha()); 
                linea[1] = funcAux.muestraEdad(lista.get(i).getEdad()); 
                if (lista.get(i).isApto()) linea[2] = "Si";
                linea[3] = lista.get(i).getObservaciones();
                linea[4] = formato.format(lista.get(i).getHasta());
                linea[5] = lista.get(i).getPediatra();
                tabla.addRow(linea);
            }
        }
        jTable1.setModel(tabla);
        jTable1.getColumnModel().getColumn(0).setMaxWidth(75);
        jTable1.getColumnModel().getColumn(1).setMaxWidth(95);
        jTable1.getColumnModel().getColumn(2).setMaxWidth(60);
        jTable1.getColumnModel().getColumn(3).setMaxWidth(230);
        jTable1.getColumnModel().getColumn(4).setMaxWidth(75);
        jTable1.getColumnModel().getColumn(0).setMinWidth(75);
        jTable1.getColumnModel().getColumn(1).setMinWidth(95);
        jTable1.getColumnModel().getColumn(2).setMinWidth(60);
        jTable1.getColumnModel().getColumn(3).setMinWidth(230);
        jTable1.getColumnModel().getColumn(4).setMinWidth(75);
    }
    
   @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jSeparator1 = new javax.swing.JSeparator();
        jTextField1 = new javax.swing.JTextField();
        jTextField4 = new javax.swing.JTextField();
        jTextField5 = new javax.swing.JTextField();
        jTextField6 = new javax.swing.JTextField();
        jDateFecha = new com.toedter.calendar.JDateChooser();
        jCheckApto = new javax.swing.JCheckBox();
        jTxtObservaciones = new javax.swing.JTextField();
        jDateHasta = new com.toedter.calendar.JDateChooser();
        jLabelTitular = new javax.swing.JLabel();
        jLabelNombre = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        jLabel2 = new javax.swing.JLabel();
        jBtnConfirmar = new javax.swing.JButton();
        jBtnSalir = new javax.swing.JButton();
        jLabel3 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Aptitud física");
        setBounds(new java.awt.Rectangle(200, 100, 768, 427));
        setResizable(false);

        jPanel1.setLayout(null);

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 18));
        jLabel1.setForeground(new java.awt.Color(51, 153, 0));
        jLabel1.setText("Aptitud Física");
        jPanel1.add(jLabel1);
        jLabel1.setBounds(20, 20, 220, 20);
        jPanel1.add(jSeparator1);
        jSeparator1.setBounds(0, 50, 790, 10);

        jTextField1.setBackground(new java.awt.Color(51, 153, 0));
        jTextField1.setEditable(false);
        jTextField1.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jTextField1.setForeground(new java.awt.Color(255, 255, 255));
        jTextField1.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        jTextField1.setText("Fecha");
        jPanel1.add(jTextField1);
        jTextField1.setBounds(30, 70, 90, 22);

        jTextField4.setBackground(new java.awt.Color(51, 153, 0));
        jTextField4.setEditable(false);
        jTextField4.setFont(new java.awt.Font("Tahoma", 1, 11));
        jTextField4.setForeground(new java.awt.Color(255, 255, 255));
        jTextField4.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        jTextField4.setText("Apto");
        jPanel1.add(jTextField4);
        jTextField4.setBounds(120, 70, 60, 22);

        jTextField5.setBackground(new java.awt.Color(51, 153, 0));
        jTextField5.setEditable(false);
        jTextField5.setFont(new java.awt.Font("Tahoma", 1, 11));
        jTextField5.setForeground(new java.awt.Color(255, 255, 255));
        jTextField5.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        jTextField5.setText("Observaciones");
        jPanel1.add(jTextField5);
        jTextField5.setBounds(180, 70, 250, 22);

        jTextField6.setBackground(new java.awt.Color(51, 153, 0));
        jTextField6.setEditable(false);
        jTextField6.setFont(new java.awt.Font("Tahoma", 1, 11));
        jTextField6.setForeground(new java.awt.Color(255, 255, 255));
        jTextField6.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        jTextField6.setText("Válido hasta");
        jPanel1.add(jTextField6);
        jTextField6.setBounds(430, 70, 90, 22);

        jDateFecha.setDateFormatString("dd/MM/yyyy");
        jPanel1.add(jDateFecha);
        jDateFecha.setBounds(30, 92, 90, 22);

        jCheckApto.setBackground(new java.awt.Color(255, 255, 255));
        jCheckApto.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jPanel1.add(jCheckApto);
        jCheckApto.setBounds(140, 96, 15, 15);
        jPanel1.add(jTxtObservaciones);
        jTxtObservaciones.setBounds(180, 92, 250, 22);

        jDateHasta.setDateFormatString("dd/MM/yyyy");
        jPanel1.add(jDateHasta);
        jDateHasta.setBounds(430, 92, 90, 22);

        jLabelTitular.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabelTitular.setForeground(new java.awt.Color(51, 153, 0));
        jLabelTitular.setText("Titular:");
        jPanel1.add(jLabelTitular);
        jLabelTitular.setBounds(270, 20, 50, 20);

        jLabelNombre.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabelNombre.setForeground(new java.awt.Color(51, 51, 51));
        jPanel1.add(jLabelNombre);
        jLabelNombre.setBounds(330, 20, 220, 20);

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {

            }
        ));
        jTable1.setRowHeight(20);
        jScrollPane1.setViewportView(jTable1);

        jPanel1.add(jScrollPane1);
        jScrollPane1.setBounds(30, 134, 690, 240);

        jLabel2.setText("Decreto 542/007 - Artículo 7 y 8");
        jPanel1.add(jLabel2);
        jLabel2.setBounds(30, 380, 260, 14);

        jBtnConfirmar.setText("Confirmar");
        jBtnConfirmar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBtnConfirmarActionPerformed(evt);
            }
        });
        jPanel1.add(jBtnConfirmar);
        jBtnConfirmar.setBounds(530, 90, 80, 22);

        jBtnSalir.setText("Salir");
        jBtnSalir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBtnSalirActionPerformed(evt);
            }
        });
        jPanel1.add(jBtnSalir);
        jBtnSalir.setBounds(335, 390, 80, 22);

        jLabel3.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(159, 177, 128)));
        jPanel1.add(jLabel3);
        jLabel3.setBounds(120, 92, 60, 22);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 750, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 427, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

private void jBtnSalirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnSalirActionPerformed
    this.dispose();
}//GEN-LAST:event_jBtnSalirActionPerformed

private void jBtnConfirmarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnConfirmarActionPerformed
    if(jDateFecha.getDate() != null && jCheckApto.isSelected()
            && jDateHasta.getDate() != null && niño.controlFecha(jDateFecha.getDate())
            && modelo.comparaFechas(jDateHasta.getDate(),jDateFecha.getDate())){
        AptitudFisica nueva= new AptitudFisica(jDateFecha.getDate(),
                niño.calculoEdad(jDateFecha.getDate()),
                jCheckApto.isSelected(),
                jTxtObservaciones.getText(),
                jDateHasta.getDate(),
                actor);
        niño.getCarne().agregarAptitud(nueva);
        jDateFecha.setDate(null);
        jCheckApto.setSelected(false);
        jTxtObservaciones.setText("");
        jDateHasta.setDate(null);
        cargarTabla();
    }
    else{
        if (jDateFecha.getDate() == null || jDateHasta.getDate() == null
                || (jDateFecha.getDate() != null && jDateHasta.getDate() != null
                && !modelo.comparaFechas(jDateHasta.getDate(),jDateFecha.getDate()))){
            JOptionPane.showMessageDialog(null,"Ingrese fechas correctas", "Error", 2);
        }
        if (!jCheckApto.isSelected())
            JOptionPane.showMessageDialog(null,"Marque como apto", "Error", 2);
    }
}//GEN-LAST:event_jBtnConfirmarActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jBtnConfirmar;
    private javax.swing.JButton jBtnSalir;
    private javax.swing.JCheckBox jCheckApto;
    private com.toedter.calendar.JDateChooser jDateFecha;
    private com.toedter.calendar.JDateChooser jDateHasta;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabelNombre;
    private javax.swing.JLabel jLabelTitular;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JTable jTable1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField4;
    private javax.swing.JTextField jTextField5;
    private javax.swing.JTextField jTextField6;
    private javax.swing.JTextField jTxtObservaciones;
    // End of variables declaration//GEN-END:variables
}
